package com.example.g5project.service;

import com.example.g5project.entity.Consultant;
import com.example.g5project.entity.frontEndObject.ConsultantIDwithConsultNumber;
import com.example.g5project.entity.frontEndObject.ConsultantIDwithMonthGrade;
import com.example.g5project.entity.relation.ConsultInfo;
import com.example.g5project.exception.EntityNotExistException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * @author Hu Zirui
 * @version 1.0.0
 * @ClassName ConsultantService.java
 * @Description TODO
 * @createTime 2022年03月09日 13:18:00
 */
public interface ConsultantService {
    Consultant getConsultantByID(Integer id) throws EntityNotExistException;                                            // 根据ID获取咨询师信息

    List<Consultant> getConsultantByIds(Collection<Integer> ids);

    Consultant getCounsultantByName(String name) throws EntityNotExistException;                                        // 根据姓名获取咨询师信息

    void addConsultant(Consultant consultant);                                                                          // 增加一个新的咨询师

    void deleteConsultantByID(Integer id);                                                                              // 根据ID删除一个咨询师

    void deleteConsultantByName(String name);                                                                           // 根据姓名删除一个咨询师

    void updateConsultantByID(Integer id, Consultant consultant) throws EntityNotExistException;                        // 根据ID更新consultant内容

    ArrayList<Consultant> getAllConsultant() throws EntityNotExistException;                                            // 查询所有咨询师

    Integer getTodayConsultNumber(Integer consultant_id);                                                               // 返回今日咨询数

    String getTodayConsultTime(Integer consultant_id);                                                                  // 返回今日咨询时长

    ArrayList<Consultant> getAllAliveConsultant() throws EntityNotExistException;                                       // 返回所有在线的咨询师

    Integer getAllConsultSessionNumber();                                                                               // 返回咨询师会话数量

    ArrayList<ConsultantIDwithConsultNumber> getFirstKrankConsultantByConsultNumber(int k, int month) throws EntityNotExistException;      // 返回前k个咨询数量排行最高的咨询师

    ArrayList<ConsultantIDwithMonthGrade> getFirstKrankConsultantByMonthsGrade(int k, int month) throws EntityNotExistException;        // 返回前k个月好评最高的咨询师

    void addAliveSessionNumber(Integer id);                                                                                       // 增加在线会话数量

    void addTodaySessionNumber(Integer id);                                                                                       // 增加今日完成会话数量

    ArrayList<String> getScheduleByMonth(String name, String month);

    Integer getGradeByName(String name);

    ArrayList<ConsultInfo> getAllConsultMessage(String name);

    void setStatus(String name);

    void increAllConsultNumber(String name);

    void incretodayConsultNumber(String name);

    void updateHoldTimeByName(String name, String hold_time);

    void increTodayConsultTime(String name, String time);

    void increAllConsultTime(String name, String time);

    void addAliveSessionNumberByName(String name);

    void minusAliveSessionNumber(Integer id);

    void minusAliveSessionNumberByName(String name);
}
